Задачи по двумерным массивам

Уровень 1

Задача 1. Четность и нечетность столбца:

Дан двумерный массив. Если у элемента четный индекс столбца, то прибавьте к нему 10, иначе умножьте этот элемент на 2.
Входные данные:
Первая строка содержит два целых числа n (1 ≤ n ≤ 100) и m (1 ≤ m ≤ 100) - количество строк и столбцов соответственно.
Далее идет ввод матрицы. Каждый элемент не превосходит 10^9.
Выходные данные:
Вывести получившейся массив.

Пример:

Ввод Вывод
3 3
8 12 4
14 2 18
16 34 13
18 24 14
24 4 28
26 68 23

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[100][100], i, j, n, m;
	scanf("%i%i", &n, &m);
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			scanf("%i", &A[i][j]);
			if (j % 2 == 0) {
				A[i][j] += 10;
			}
			else {
				A[i][j] *= 2;
			}
		}
	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			printf("%i ", A[i][j]);
		}
		printf("\n");
	}
	return 0;
}

Задача 2. Найди максимум и минимум:

Дан двумерный массив. Найдите в нем максимальный и минимальный элемент и его индексы. Если ответов несколько, то выведите любой из них.
Входные данные:
Первая строка содержит два целых числа n (1 ≤ n ≤ 100) и m (1 ≤ m ≤ 100) - количество строк и столбцов соответственно.
Далее идет ввод матрицы. Каждый элемент не превосходит 10^9.
Выходные данные:
В первой строке выведите максимальный элемент и его индексы(сначала номер строки, потом номер столбца);
Во второй строке выведите минимальный элемент и его индексы(сначала номер строки, потом номер столбца).

Пример:

Ввод Вывод
4 6
3 12 4 1 1 7
4 5 2 8 14 6
16 11 4 2 8 3
14 4 2 13 32 17
32 4 5
1 1 4

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[100][100], i, j, n, m;
	scanf("%i%i", &n, &m);
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			scanf("%i", &A[i][j]);
		}
	}
	int max = A[0][0], min = A[0][0];
	int ind_i_max = 0, ind_j_max = 0, ind_i_min = 0, ind_j_min = 0;
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			if (max < A[i][j]) {
				max = A[i][j];
				ind_i_max = i + 1;
				ind_j_max = j + 1;
			}
			if (min > A[i][j]) {
				min = A[i][j];
				ind_i_min= i + 1;
				ind_j_min = j + 1;
			}
		}
	}
	printf("%i %i %i\n", max, ind_i_max, ind_j_max);
	printf("%i %i %i", min, ind_i_min, ind_j_min);
	return 0;
}

Задача 3. Сильно большой элемент:

Дан двумерный массив. Элемент считается сильно большим, если все его соседи строго меньше его. Элемент считается соседним, если он расположен справа, или слева, или сверху, или снизу. Нужно посчитать количество таких элементов.
Входные данные:
Первая строка содержит два целых числа n (1 ≤ n ≤ 100) и m (1 ≤ m ≤ 100) - количество строк и столбцов соответственно.
Далее идет ввод матрицы. Каждый элемент больше 0 и не превосходит 10^9.
Выходные данные:
Вывести ответ.

Пример:

Ввод Вывод
5 4
8 4 3 5
7 12 8 15
4 16 7 9
3 1 6 4
5 24 19 12
4

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
 
int main() {
	int A[100][100], i, j, n, m, k, H, ans = 0;
	scanf("%i%i", &n, &m);
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			scanf("%i", &A[i][j]);
		}
	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			H = 0;  // сколько всего соседий у этого элемента
			k = 0; // количество элементов, которые меньше проверяемого
			if (j > 0) {
				H++;
				if (A[i][j] > A[i][j - 1]) {
					k++;
				}
			}
			if (j < m - 1) {
				H++;
				if (A[i][j] > A[i][j + 1]) {
					k++;
				}
			}
			if (i > 0) {
				H++;
				if (A[i][j] > A[i - 1][j]) {
					k++;
				}
			}
			if (i < n - 1) {
				H++;
				if (A[i][j] > A[i + 1][j]) {
					k++;
				}
			}
			if (k == H) {
				ans++;
			}
		}
	}
	printf("%i", ans);
	return 0;
}

Задача 4. Заполнение матрицы:

Вам нужно заполнить матрицу размером n*n вот таким образом:

...

Каждый следующий элемент отличается на 1.

Пример такой матрицы для n = 3:
1 2 3
6 5 4
7 8 9
Входные данные:
Первая строка содержит одно целое число n (1 ≤ n ≤ 100) - количество строк и столбцов.
Выходные данные:
Вывести матрицу.

Пример:

Ввод Вывод
4
1 2 3 4
8 7 6 5
9 10 11 12
16 15 14 13

Задача 5. Удаление столбца:

Дан двумерный массив размером n*m. Удалить столбец, у которого из всех столбцов самая большая сумма элементов. Гарантируется, что такой столбец есть.
Входные данные:
Первая строка содержит два целых числа n (1 ≤ n ≤ 100) и m (2 ≤ m ≤ 100)- количество строк и столбцов соответственно.
Далее идет ввод матрицы. Каждый элемент больше -10^9 и не превосходит 10^9.
Выходные данные:
Вывести матрицу после удаления нужного столбца.

Пример:

Ввод Вывод
3 4
2 8 3 1
8 7 5 4
6 3 1 12
2 3 1
8 5 4
6 1 12

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int main() {
	int A[100][100], i, j, n, m;
	scanf("%i%i", &n, &m);
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			scanf("%i", &A[i][j]);
		}
	}
	int max = 0, sum, ind = 0;
	for (i = 0; i < m; i++) {
		sum = 0;
		for (j = 0; j < n; j++) {
			sum += A[j][i];
		}
		if (max < sum) {
			max = sum; 
			ind = i;
		}
	}
	for (i = ind; i < m - 1; i++) {
		for (j = 0; j < n; j++) {
			A[j][i] = A[j][i + 1];
		}
	}
	m--;
	for (i = 0; i < n; i++) {
		for (j = 0; j < m; j++) {
			printf("%i ", A[i][j]);
		}
		printf("\n");
	}
	return 0;
}

Задача 6. Заполнение матрицы:

Вам нужно заполнить матрицу размером n*n вот таким образом:

...

Каждый следующий элемент отличается на 1.

Пример такой матрицы для n = 3:
1 2 5
4 3 6
9 8 7
Входные данные:
Первая строка содержит одно целое число n (1 ≤ n ≤ 100) - количество строк и столбцов.
Выходные данные:
Вывести матрицу.

Пример:

Ввод Вывод
3 1 2 5
4 3 6
9 8 7
4 1 2 5 10
4 3 6 11
9 8 7 12
16 15 14 13

Для красивого вывода можно использовать спецификатор %2d или %3d и так далее. Цифры обозначают количество выделяемых мест под наше число.

Пример на Си:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
 
int main() {
	int A[100][100], i, j, n, num = 1, max_j, max_i;
	scanf("%i", &n);
	A[0][0] = num;
	num++;
	i = 1;
	max_i = 2;
	max_j = 2;
	while (i < n) {  // столбцы
		j = 0;
		while (j < max_j) {  // стороки
			A[j][i] = num++;
			j++;
		}
		i--;
		j--;
		while (i >= 0) {
			A[j][i] = num++;
			i--;
		}
		max_j++;
		i = max_i;
		max_i++;
	}
	for (i = 0; i < n; i++) {
		for (j = 0; j < n; j++) {
			printf("%i ", A[i][j]);
		}
		printf("\n");
	}
	return 0;
}

Задача 7. Вывод простой строки:

Дана строка размером n*m. Нужно найти строку, у которой все ее элементы простые числа.
Входные данные:
Первая строка содержит два целых числа n (1 ≤ n ≤ 30) и m (1 ≤ m ≤ 30)- количество строк и столбцов соответственно.
Далее идет ввод матрицы. Каждый элемент больше 1 и не превосходит 10^8.
Выходные данные:
Если такая строка есть, то выведите yes и эту строку через символ '\n'. Иначе no. Если строк несколько, то выведите любую из них.

Пример:

Ввод Вывод
3 4
7 3 2 29
37 8 401 35
68 5 4 15
yes
7 3 2 29
3 3
7 6 2
37 8 404
68 5 4
no

Уровень 2

Задача 1. Поиск числа:

Дан двумерный массив размером n*m. Нужно определить наличие в массиве числа K, которое может быть элементом массива или может быть составлено из всех элементов одной строки или одного столбца.
Давайте рассмотрим данный массив размером 2*4:
2 4 5 3
6 8 2 7
Из строк можно составить числа 2453 и 6827, из столбцов 26, 48, 52, 37.
Входные данные:
Первая строка содержит три целых числа n (1 ≤ n ≤ 100), m (1 ≤ m ≤ 100) и K (1 ≤ K ≤ 10^12) - количество строк, столбцов и искомое число соответственно.
Далее идет ввод матрицы. Каждый элемент больше 0 и не превосходит 10^9.
Выходные данные:
Выведите yes, если в массиве есть число K в любом виде, иначе no.

Пример:

Ввод Вывод
2 4 48
2 4 5 3
6 8 2 7
yes
2 4 5
2 1 5 4
6 8 2 7
yes
2 4 9
2 4 5 3
6 8 8 7
no

Code.C © Copyright Павел Калашников 2021
обратная связь code.c04@mail.ru